<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%-- <jsp:forward page="/emps"></jsp:forward> --%>
<%
	pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">

<script type="text/javascript"
	src="${APP_PATH }/static/js/jquery-1.12.4.min.js"></script>

<link
	href="${APP_PATH }/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"
	rel="stylesheet">

<script
	src="${APP_PATH }/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>

<title>员工列表</title>
</head>
<body>
	
	<!-- 员工修改的模态框 -->
<div class="modal fade" id="empUpdateModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">员工修改</h4>
      </div>
      <div class="modal-body">
        <form class="form-horizontal">
		  <div class="form-group">
		    <label class="col-sm-2 control-label">empName</label>
		    <div class="col-sm-10">
		      	<p class="form-control-static" id="empName_update_static"></p>
		    </div>
		  </div>
		  <div class="form-group">
		    <label class="col-sm-2 control-label">email</label>
		    <div class="col-sm-10">
		      <input type="text" name="email" class="form-control" id="email_update_input" placeholder="email@niit.com">
		      <span class="help-block"></span>
		    </div>
		  </div>
		  <div class="form-group">
		    <label class="col-sm-2 control-label">gender</label>
		    <div class="col-sm-10">
		      <label class="radio-inline">
				  <input type="radio" name="gender" id="gender1_update_input" value="M" checked="checked"> 男
				</label>
				<label class="radio-inline">
				  <input type="radio" name="gender" id="gender2_update_input" value="F"> 女
				</label>
		    </div>
		  </div>
		  <div class="form-group">
		    <label class="col-sm-2 control-label">deptName</label>
		    <div class="col-sm-4">
		    	<!-- 部门提交部门id即可 -->
		      <select class="form-control" name="dId">
		      </select>
		    </div>
		  </div>
		</form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
        <button type="button" class="btn btn-primary" id="emp_update_btn">更新</button>
      </div>
    </div>
  </div>
</div>

	<!-- 员工新增模态框 -->
	<div class="modal fade" id="empAddModal" tabindex="-1" role="dialog"
		aria-labelledby="myModalLabel">
		<div class="modal-dialog" role="document">
			<div class="modal-content">
				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal"
						aria-label="Close">
						<span aria-hidden="true">&times;</span>
					</button>
					<h4 class="modal-title" id="myModalLabel">员工添加</h4>
				</div>
				<div class="modal-body">
					<form class="form-horizontal">
						<div class="form-group">
							<label class="col-sm-2 control-label">EmpName</label>
							<div class="col-sm-10">
								<input type="text" name="empName" class="form-control"
									id="empName_add_input" placeholder="empName"> <span
									class="help-block"></span>
							</div>
						</div>
						<div class="form-group">
							<label class="col-sm-2 control-label">Email</label>
							<div class="col-sm-10">
								<input type="text" name="email" class="form-control"
									id="email_add_input" placeholder="email@niit.com.cn"> <span
									class="help-block"></span>
							</div>
						</div>
						<div class="form-group">
							<label class="col-sm-2 control-label">Gender</label>
							<div class="col-sm-10">
								<label class="radio-inline"> <input type="radio"
									name="gender" id="gender1_add_input" value="M"
									checked="checked"> 男
								</label> <label class="radio-inline"> <input type="radio"
									name="gender" id="gender2_add_input" value="F"> 女
								</label>
							</div>
						</div>

						<div class="form-group">
							<label class="col-sm-2 control-label">Department</label>
							<div class="col-sm-4">
								<select class="form-control" name="dId" id="dept_add_select">

								</select>
							</div>
						</div>

					</form>
				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
					<button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
				</div>
			</div>
		</div>
	</div>

	<!--搭建页面  -->
	<div class="container ">
		<!--标题  -->
		<div class="row">
			<div class="col-md-12">
				<h1>SSM-CRUD</h1>
			</div>
		</div>
		<!--按钮  -->
		<div class="row">
			<div class="col-md-4 col-md-offset-8">
				<button class="btn btn-primary" id="emp_add_modal_btn">新增</button>
				<button class="btn btn-danger" id="emp_delete_all_btn">删除</button>
			</div>
		</div>
		<!--表格  -->
		<div class="row">
			<div class="col-md-12">
				<table class="table table-striped">
					<thead>
						<tr>
							<th>
								<input type="checkbox" id="check_all"/>
							</th>
							<th>#</th>
							<th>empName</th>
							<th>gender</th>
							<th>email</th>
							<th>deptName</th>
							<th>操作</th>
						</tr>
					</thead>
					<tbody>
					</tbody>
				</table>
			</div>
		</div>
		<!--分页信息  -->
		<div class="row">
			<!-- 分页文字信息 -->
			<div class="col-md-6" id="page_info_div"></div>
			<!--分页条信息  -->
			<div class="col-md-6 col-md-offset-6" id="page_nav_div"></div>
		</div>
	</div>
	<script type="text/javascript">
		//全局变量保存总记录数
		var totalRecord,currentNum;
		
		//1,页面加载完成之后,发送ajax请求,获得分页数据
		$(function() {
			to_page(1);
		});
		
		function to_page(pn) {
			$.ajax({
				url : "${APP_PATH}/emps",
				data : "pn=" + pn,
				type : "GET",
				success : function(result) {
					//console.log(result);
					//1,解析并构建员工数据
					build_emps_table(result);
					//2,解析并显示分页信息
					build_page_info(result);
					//3分页条
					build_page_nav(result);
				}
			})
		}

		//构建表结构并显示列表信息
		function build_emps_table(result) {
			//清空元素
			$("tbody").empty();
			
			var emps = result.extend.pageInfo.list;
			$.each(emps, function(index, item) {
				//alert(item.empName);
				var checkBoxTd = $("<td><input type='checkbox' class='check_item'/></td>");
				var empIdTd = $("<td></td>").append(item.empId);
				var empNameTd = $("<td></td>").append(item.empName);
				var genderTd = $("<td></td>").append(
						item.gender == 'M' ? '男' : '女');
				var emailTd = $("<td></td>").append(item.email);
				var deptNameTd = $("<td></td>").append(item.department.deptName);				
				
				var editBtn = $("<button></button>").addClass("btn btn-primary btn-sm edit_btn")
													.append($("<span></span>").addClass("glyphicon glyphicon-pencil"))
													.append(" 编辑");
				
				//为编辑按钮添加一个自定义的属性，来表示当前员工id
				editBtn.attr("edit-id",item.empId);
				
				var delBtn = $("<button></button>").addClass("btn btn-danger btn-sm delete_btn")
				                                   .append($("<span></span>").addClass("glyphicon glyphicon-trash"))
				                                   .append(" 删除");
				
				//为删除按钮添加一个自定义的属性来表示当前删除的员工id
				delBtn.attr("del-id",item.empId);
				
				var btnTd = $("<td></td>").append(editBtn).append(" ").append(
						delBtn);
				
				$("<tr></tr>").append(checkBoxTd).append(empIdTd).append(empNameTd).append(
						genderTd).append(emailTd).append(deptNameTd)
						.append(btnTd).appendTo("tbody");				
			});
		};
		
		//解析分页信息
		function build_page_info(result) {
			//清空元素
			$("#page_info_div").empty();
			
			$("#page_info_div").append(
					"当前第" + result.extend.pageInfo.pageNum + "页,共"
							+ result.extend.pageInfo.pages + "页,共"
							+ result.extend.pageInfo.total + "条数据");
			totalRecord = result.extend.pageInfo.total;
			currentNum = result.extend.pageInfo.pageNum;
		}
		//解析分页条
		function build_page_nav(result) {
			
			//清空元素
			$("#page_nav_div").empty();
			
			//构建ul元素
			var ul = $("<ul></ul>").addClass("pagination");
			//构建首页,末页,前一页,下一页的li
			var firstPageLi = $("<li></li>").append(
					$("<a></a>").append("首页").attr("href", "#"));
			var prePageLi = $("<li></li>").append(
					$("<a></a>").append("&laquo;").attr("href", "#"));
			var nextPageLi = $("<li></li>").append(
					$("<a></a>").append("&raquo;").attr("href", "#"));
			var lastPageLi = $("<li></li>").append(
					$("<a></a>").append("末页").attr("href", "#"));			
			
			//将首页和前一页的li加入ul
			ul.append(firstPageLi).append(prePageLi);
			//如果当前是第一页,首页按钮无法点击
			if (result.extend.pageInfo.pageNum == 1) {
				firstPageLi.addClass("disabled");
			}else{
				//为元素添加点击事件
				firstPageLi.click(function() {
					to_page(1);
				})
			}
			
			
				
			//如果当前没有前一页, 前一页按钮无法点击
			if (!result.extend.pageInfo.hasPreviousPage) {
				prePageLi.addClass("disabled");
			}else{
				//为元素添加点击事件
				prePageLi.click(function() {
					to_page(result.extend.pageInfo.pageNum - 1);
				})
			}
			//将5个分页的li加入ul
			$.each(result.extend.pageInfo.navigatepageNums, function(index,
					item) {
				var numLi = $("<li></li>").append(
						$("<a></a>").append(item).attr("href", "#"));
				//给当前页的按钮加上激活效果
				if (result.extend.pageInfo.pageNum == item) {
					numLi.addClass("active");
				}
				ul.append(numLi);
				//为元素绑定点击事件
				numLi.click(function() {
					to_page(item);
				})
			});
			
			//将后一页页和末页的li加入ul
			ul.append(nextPageLi).append(lastPageLi);
			
			//如果当前没有后一页, 后一页按钮无法点击
			if (!result.extend.pageInfo.hasNextPage) {
				nextPageLi.addClass("disabled");
			}else{
				//为元素添加点击事件
				nextPageLi.click(function() {
						to_page(result.extend.pageInfo.pageNum + 1);
					})
			} 
			//如果当前是最后一页, 末页按钮无法点击
			if (result.extend.pageInfo.pageNum == result.extend.pageInfo.pages) {
				lastPageLi.addClass("disabled");
			}else{
				//为元素添加点击事件
				lastPageLi.click(function() {
					to_page(result.extend.pageInfo.pages);
				})
			}			
			//构建nav元素并加入ul
			var nav = $("<nav></nav>").append(ul);
			
			$("#page_nav_div").append(nav);
		};
		
		//新增按钮绑定点击事件
		$("#emp_add_modal_btn").click(function() {
			//表单重置，js方法
			$("#empAddModal form")[0].reset();
			//获取所有部门列表
			getDepts("#dept_add_select");
			//弹出模态框
			$('#empAddModal').modal();
		})
		
		//查询部门列表并显示在模态框下拉列表
		function getDepts(ele) {
			$.ajax({
				url : "${APP_PATH}/depts",
				type : "GET",
				success : function(result) {
					//console.log(result)
					//清除option元素
					$(ele).empty();
					$.each(result.extend.depts, function(index, item) {
						var optionEle = $("<option></option>").append(
								item.deptName).attr("value", item.deptId);
						$(ele).append(optionEle);
					});
				}
			})
		};
		//保存员工按钮点击事件
		$("#emp_save_btn").click(function() {
			//1,前端数据校验
			if(!validate_add_form()){
				return false;
			}; 
			//2、判断ajax用户名校验是否成功。
			if($(this).attr("ajax-va")=="error"){
				return false;
			}
			//3,发送ajax请求保存员工
			$.ajax({
				url : "${APP_PATH}/emp",
				type : "POST",
				data : $("#empAddModal form").serialize(),
				success : function(result) {
					//alert(result.msg);	
					if(result.code == 100){
						//员工保存成功；
						//1、关闭模态框
						$("#empAddModal").modal('hide');
						
						//2、来到最后一页，显示刚才保存的数据
						//发送ajax请求显示最后一页数据即可
						to_page(1);
					}else{
						//显示失败信息
						//console.log(result);
						//有哪个字段的错误信息就显示哪个字段的；
						if(undefined != result.extend.errorFields.email){
							//显示邮箱错误信息
							show_validate_msg("#email_add_input", "error", result.extend.errorFields.email);
						}
						if(undefined != result.extend.errorFields.empName){
							//显示员工名字的错误信息
							show_validate_msg("#empName_add_input", "error", result.extend.errorFields.empName);
						}
					}
				}
			})
		})
		
		function validate_add_form(){
			//1,拿到要校验的数据
			var empName = $("#empName_add_input").val();
			//2-1,使用正则表达式进行校验用户名
			var regName = /^[a-zA-Z0-9_-]{3,16}$/;
			if(!regName.test(empName)){
				//alert("用户名应该是3-16位字母和数字的组合");
				//添加样式之前先清空这个元素之前的样式
				//$("#empName_add_input").parent().addClass("has-error");
				//$("#empName_add_input").next("span").text("用户名应该是3-16位字母和数字的组合")
				show_validate_msg("#empName_add_input", "error", "用户名应该是3-16位字母和数字的组合");
				return false;
			}else{
				//$("#empName_add_input").parent().addClass("has-success");
				//$("#empName_add_input").next("span").text("");
				show_validate_msg("#empName_add_input", "success", "");
			}
			//2-2、校验邮箱信息
			var email = $("#email_add_input").val();
			var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
			if(!regEmail.test(email)){
				//alert("邮箱格式不正确");		
				//$("#email_add_input").parent().addClass("has-error");
				//$("#email_add_input").next("span").text("邮箱格式不正确")；
				show_validate_msg("#email_add_input", "error", "邮箱格式不正确");
				return false;
			}else{
				//$("#email_add_input").parent().addClass("has-error");
				//$("#email_add_input").next("span").text("");
				show_validate_msg("#email_add_input", "success", "");
			}
			return true;
		}
		
		//显示校验结果的方法
		function show_validate_msg(ele,status,msg){
			//清除当前元素的校验状态
			$(ele).parent().removeClass("has-success has-error");
			$(ele).next("span").text("");
			if("success"==status){
				$(ele).parent().addClass("has-success");
				$(ele).next("span").text(msg);
			}else if("error" == status){
				$(ele).parent().addClass("has-error");
				$(ele).next("span").text(msg);
			}
		}
		
		//校验用户名是否可用
		$("#empName_add_input").change(function(){
			//发送ajax请求校验用户名是否可用
			var empName = $(this).val();
			$.ajax({
				url:"${APP_PATH}/checkuser",
				data:"empName="+empName,
				type:"POST",
				success:function(result){
					if(result.code==100){
						show_validate_msg("#empName_add_input","success","用户名可用");
						$("#emp_save_btn").attr("ajax-va","success");
					}else{
						show_validate_msg("#empName_add_input","error",result.extend.va_msg);
						$("#emp_save_btn").attr("ajax-va","error");
					}
				}
			});
		});
		
		//1、使用click方法无法绑定, 需要使用on方法
		$(document).on("click",".edit_btn",function(){
						
			//1、查出部门信息，并显示部门列表
			getDepts("#empUpdateModal select");
			//2,发送ajax请求根据id获得员工信息
			getEmp($(this).attr("edit-id"));
			//3、把员工的id传递给模态框的更新按钮
			$("#emp_update_btn").attr("edit-id",$(this).attr("edit-id"));
			//4,打开更新模态框
			$("#empUpdateModal").modal();
		});
		
		//发送ajax请求根据id获得员工信息的方法
		function getEmp(id){
			$.ajax({
				url:"${APP_PATH}/emp/"+id,
				type:"GET",
				success:function(result){
					//console.log(result);
					var empData = result.extend.emp;
					$("#empName_update_static").text(empData.empName);
					$("#email_update_input").val(empData.email);
					$("#empUpdateModal input[name=gender]").val([empData.gender]);
					$("#empUpdateModal select").val([empData.dId]);
				}
			});
		}
		
		//点击更新，更新员工信息
		$("#emp_update_btn").click(function(){
			//验证邮箱是否合法
			//1、校验邮箱信息
			var email = $("#email_update_input").val();
			var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
			if(!regEmail.test(email)){
				show_validate_msg("#email_update_input", "error", "邮箱格式不正确");
				return false;
			}else{
				show_validate_msg("#email_update_input", "success", "");
			}
			
			//2、发送ajax请求保存更新的员工数据
			$.ajax({
				url:"${APP_PATH}/emp/"+$(this).attr("edit-id"),
				type:"PUT",
				data:$("#empUpdateModal form").serialize(),
				success:function(result){
					//alert(result.msg);
					//1、关闭对话框
					$("#empUpdateModal").modal("hide");
					//2、回到本页面
					to_page(currentNum);
				}
			});
		});
		
		//单个删除
		$(document).on("click",".delete_btn",function(){
			//1、弹出是否确认删除对话框
			var empName = $(this).parents("tr").find("td:eq(2)").text();
			var empId = $(this).attr("del-id");
			//alert($(this).parents("tr").find("td:eq(1)").text());
			if(confirm("确认删除【"+empName+"】吗？")){
				//确认，发送ajax请求删除即可
				$.ajax({
					url:"${APP_PATH}/emp/"+empId,
					type:"DELETE",
					success:function(result){
						alert(result.msg);
						//回到本页
						to_page(currentNum);
					}
				});
			}
		});
		
		//完成全选/全不选功能
		$("#check_all").click(function(){
			//alert($(this).attr("checked"));
			//attr获取checked是undefined;
			//attr获取自定义属性的值；
			//prop修改和读取dom原生属性的值
			$(".check_item").prop("checked",$(this).prop("checked"));
		});
		
		//check_item
		$(document).on("click",".check_item",function(){
			//判断当前选择中的元素是否5个
			var flag = $(".check_item:checked").length==$(".check_item").length;
			$("#check_all").prop("checked",flag);
		});
		
		//点击全部删除，就批量删除
		$("#emp_delete_all_btn").click(function(){
			//
			var empNames = "";
			var del_idstr = "";
			$.each($(".check_item:checked"),function(){
				//this
				empNames += $(this).parents("tr").find("td:eq(2)").text()+",";
				//组装员工id字符串
				del_idstr += $(this).parents("tr").find("td:eq(1)").text()+"-";
			});
			//去除empNames多余的,
			empNames = empNames.substring(0, empNames.length-1);
			//去除删除的id多余的-
			del_idstr = del_idstr.substring(0, del_idstr.length-1);
			if(confirm("确认删除【"+empNames+"】吗？")){
				//发送ajax请求删除
				$.ajax({
					url:"${APP_PATH}/emp/"+del_idstr,
					type:"DELETE",
					success:function(result){
						alert(result.msg);
						//回到当前页面
						to_page(currentNum);
					}
				});
			}
		});
	</script>


</body>
</html>